package com.example.mediademo;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.opengl.GLSurfaceView;
import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.example.mediademo.opengl.BitmapDrawer;
import com.example.mediademo.opengl.IDrawder;
import com.example.mediademo.opengl.SimpleRender;
import com.example.mediademo.opengl.TriangleDrawer;

public class OpenGlActivity extends AppCompatActivity {

    private GLSurfaceView glSurfaceView;

    private IDrawder drawder;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_opengl);
        glSurfaceView = findViewById(R.id.gl_surface);
//        if (getIntent().getIntExtra("type",0) == 0) {
//
//        } else {
//            new BitmapDrawable(BitmapFactory.decodeResource(CONTEXT.res,R.drawable.cover));
//        }
//        drawder = new TriangleDrawer();
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.test);
        drawder = new BitmapDrawer(bitmap);

        initRender();
    }

    private void initRender() {
        glSurfaceView.setEGLContextClientVersion(2);
        glSurfaceView.setRenderer(new SimpleRender(drawder));
    }
}

// 创建GLSurfaceView，用于显示OpenGL绘制内容

// GLSurfaceView设置版本(1.0/2.0/3.0/3.1) 设置GLSurfaceView.Renderer
// 根据Render内部回调方法实现绘制
// 1.onSurfaceCreate  【清屏 clearColor clear搭配使用,每一帧绘制前把上一帧的缓冲区清掉
// clearColor设置清屏颜色，可以理解为画布颜色，但是发现设置非黑色会不断闪屏，不设置的话画布一直默认黑色】
// 【设置纹理id：纹理id用于标记不同的图像  glGenTextures 例子好像没用到纹理id?】
// 2.onSurfaceChanged  glViewport(x,y,w,h) 设置绘制区域
// 3.onDrawFrame 绘制画面

// 创建Drawer(代理绘制工具)
// 1.初始化着色器参数 VertexBuffer(顶点着色器)  TextureBuffer(片元着色器)
// 2.创建OpenGL程序【加载着色器:根据type创建着色器(glCreateShader(type))、把着色器相关代码添加进来glShaderSource(shader,code)、编译着色器(glCompileShader)】
// 【创建OpenGL ES程序 glCreateProgram】【把着色器加入程序glAttachShader】【连接到程序 glLinkProgram】
// 【创建java和GLSL通信通道 glGetAttribLocation(program,value) 通过属性给GLSL设置不同的值】
// 【使用opengl程序(glUseProgram)】
// 3.开始绘制 【启动通信通道 glEnableVertextAttribArray(handler)】
// 【设置着色器参数(glVertexAttribPointer)】
// 【开始绘制(glDrawArrays)】


// 绘制需要纹理的图片时
// GLSL限定符
// attritude:用于各个顶点各不相同的量。如顶点颜色、坐标
// uniform：用于3D物体中所有顶点都相同的量，如光源位置、统一变换矩阵
// varying：表示易变量，用于顶点着色器传递到片元着色器的量


// 画面比例矫正【透视投影 像人眼 近大远小 渲染3D】【正交投影 远近大小一致 渲染2D】
// 计算原视频和GLSurfaceView的比例
// 1. GLSurfaceView宽 > 高，并且视频的宽高比 > GLSurfaceView的宽高比：缩放高度（Video_Ritio/GL_Ritio）
// 2. GLSurfaceView宽 > 高，并且视频的宽高比 < GLSurfaceView的宽高比：缩放宽度（GL_Ritio/Video_Ritio）
// 3. GLSurfaceView宽 < 高，并且视频的宽高比 > GLSurfaceView的宽高比：缩放高度（Video_Ritio/GL_Ritio）
// 4. GLSurfaceView宽 < 高，并且视频的宽高比 < GLSurfaceView的宽高比：缩放宽度（GL_Ritio/Video_Ritio）

// 平移画面 需要对xyz三个点进行对应的缩放处理(否则移动的距离会被正交矩阵的缩放因子改变)
// 两种方法：【将当前矩阵还原为单位矩阵->移动->再缩放】【使用当前矩阵->缩放移动距离->移动】